package com.haixiaoke.service;

import com.haixiaoke.domain.SmartLock;
import com.haixiaoke.domain.SmartLockDetails;

import java.util.List;
import java.util.Map;

/**
 * 智能锁设备Service接口
 * 
 * @author xiaolong
 * @date 2023-05-25
 */
public interface ISmartLockService {
    /**
     * 查询智能锁设备
     * 
     * @param lockId 智能锁设备主键
     * @return 智能锁设备
     */
    SmartLock selectSmartLockByLockId(Long lockId);

    /**
     * 查询智能锁设备列表
     * 
     * @param smartLock 智能锁设备
     * @return 智能锁设备集合
     */
    List<SmartLock> selectSmartLockList(SmartLock smartLock);

    /**
     * 新增智能锁设备
     * 
     * @param smartLock 智能锁设备
     * @return 结果
     */
    int insertSmartLock(SmartLock smartLock);

    /**
     * 修改智能锁设备
     * 
     * @param smartLock 智能锁设备
     * @return 结果
     */
    int updateSmartLock(SmartLock smartLock);

    /**
     * 批量删除智能锁设备
     * 
     * @param lockIds 需要删除的智能锁设备主键集合
     * @return 结果
     */
     int deleteSmartLockByLockIds(Long[] lockIds);

    /**
     * 删除智能锁设备信息
     * 
     * @param lockId 智能锁设备主键
     * @return 结果
     */
     int deleteSmartLockByLockId(Long lockId);

    /**
     * 获取智能锁门卡信息
     * @param sn 智能锁SN
     * @return
     */
     List<SmartLockDetails> selectSmartLockBySn(String sn);

    /**
     * 获取智能锁临时密码权限信息
     * @param sn 智能锁SN
     * @return
     */
    List<SmartLockDetails> getLockPassword(String sn);

    /**
     * 获取智能锁临时蓝牙权限信息
     * @param sn 智能锁SN
     * @return
     */
    List<SmartLockDetails> getBluetooth(String sn);

    /**
     * 删除智能锁蓝牙权限
     *
     * @param sn     智能锁SN
     * @param mobile 蓝牙标识
     * @return
     */
    int deleteBle(String sn, String mobile);

    /**
     * 生产离线密码
     *
     * @param smartLock 智能锁设备对象
     * @return
     */
    Map<String,Object> offlinePassword(SmartLock smartLock);

    /**
     * 添加胁迫报警密码
     * @param smartLock 智能锁设备对象
     * @return
     */
    String coercionPassword(SmartLock smartLock);

    /**
     * 远程开锁
     * @param smartLock 智能锁设备对象
     * @return
     */
    String remoteUnlock(SmartLock smartLock);

    /**
     * 校验智能锁SN号是否唯一
     * @param sn 智能锁sn
     * @return
     */
    boolean checkLockSnUnique(String sn);

    /**
     * 关闭/开启语音播放 状态(0: 关闭;1开启)
     * @param smartLock 智能锁设备对象
     * @return
     */
    int voiceStatus(SmartLock smartLock);

    /**
     * 根据智能锁SN号查询智能锁信息
     * @param sn 智能锁SN号
     * @return
     */
    SmartLock selectBySn(String sn);

    int deleteSmartLockBySn(String sn);

    List<SmartLock> selectSmartLockListBySns(List<String> sns);

    Map<String, Object> homePage(List<String> sns);
}
